package cn.yujiago.activiti.service;

import cn.yujiago.activiti.dto.FileResult;
import cn.yujiago.activiti.dto.LayuiTableResult;
import cn.yujiago.activiti.dto.LeaveBillVO;
import cn.yujiago.activiti.dto.ResponseEntity;
import org.activiti.engine.history.HistoricProcessInstance;
import org.activiti.engine.identity.Group;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.task.Comment;
import org.activiti.engine.task.Task;

import java.io.FileInputStream;
import java.io.InputStream;
import java.util.List;
import java.util.Map;

public interface WorkflowService<T> {

	/**
	 * 部署流程定义，zip格式
	 */
	FileResult saveNewDeploy(FileInputStream fileInputStream, String filename);
	/**
	 * 查询部署对象信息 对应表act_re_deployment
	 */
	LayuiTableResult<Deployment> findDeploymentList(int page, int limit);
	/**
	 * 查询流程定义信息 对应表act_re_prodef
	 */
	LayuiTableResult<ProcessDefinition> findProcessDefinitionList(int page, int limit);
	/**
	 * 启动流程实例
	 */
	ResponseEntity startProcessInstance(T object);
	/**
	 * 查询流程实例
	 */
	LayuiTableResult<HistoricProcessInstance> findProcessInstanceList(int page, int limit);
	/**
	 * 查询个人任务
	 */
	LayuiTableResult<Task> findTaskListByName(int page, int limit, String username);
	/**
	 * 查询所有的组
	 */
	List<Group> findGroupList();
	/**
	 * 查询组待办任务
	 */
	LayuiTableResult<Task> findTaskListByGroup(int page, int limit, String groupname);
	/**
	 * 拾取组待办任务为个人任务
	 */
	ResponseEntity claimTaskByTaskId(String taskId);
	/**
	 * 使用任务id获取业务单ID
	 */
	String findBusinessKeyByTaskId(String taskId);
	/**
	 * 获取当前任务完成之后的连线走向，在前台展示
	 */
	List<String> findOutComeListByTaskId(String taskId);
	/**
	 * 通过当前任务id获取历史任务的批注信息
	 */
	List<Comment> findCommentByTaskId(String taskId);
	/**
	 * 根据任务ID查询任务详情
	 */
    ResponseEntity auditByTaskId(String taskId);
	/**
	 * 办理任务
	 */
	ResponseEntity saveSubmitTask(T object);
	/**
	 * 根据流程实例ID获取当前流程图
	 */
	InputStream findImageInputStream(String processInstanceId);

	//////////////////////////////////////////////////////////////
	/**
	 * 获取当前任务节点的图片信息，用于在流程图上标记当前任务节点
	 */
	Map<String, Object> getCurrentImageInfoByTaskId(String taskId);
	/**
	 * 使用任务id获取流程定义对象
	 */
	ProcessDefinition findProcessDefinitionByTaskId(String taskId);
	/**
	 * 通过当前任务id获取当前活动节点所在的坐标(查看流程进度)
	 */
	Map<String, Integer> findCoordinateByTaskId(String taskId);
	//////////////////////////////////////////////////////////////
	/**
	 * 获取当前任务节点的图片信息，用于在流程图上标记当前任务节点
	 */
	Map<String, Object> getCurrentImageInfoByBusinessKey(String businessKey);
	/**
	 * 通过业务单据的id获取流程实例
	 */
	ProcessDefinition findProcessDefinitionByBusinessKey(String businessKey);
	/**
	 * 根据业务单据的id获取当前活动节点(查看流程进度)
	 */
	Map<String, Integer> findCoordinateByBusinessKey(String businessKey);

}
